package edu.algo3.algoThief.domain;

import java.util.List;

import edu.algo3.algoThief.dao.Repositorio;

public class Juego {

    private Jugador jugador;

    // TODO : variable int victoria que puede valer 0 o 1 o 2 con 0 = seguir, 1 = fracaso, 2 =
    // suceso

    private static Juego instance = null;

    public static Juego getInstance() {

        if (instance == null) {
            instance = new Juego();
        }
        return instance;
    }

    private Juego() {

    }

    public void inicializar(String nombreJugador, Integer arrestos) {

        this.jugador = new Jugador(nombreJugador, arrestos);
    }

    public void cargarPartida(String nombreJugador) {

        this.jugador = new Jugador(nombreJugador);
    }

    public String getNombreJugador() {

        return this.jugador.getNombre();
    }

    public int getArrestosJugador() {

        return this.jugador.getArrestos();
    }

    public Jugador getJugador() {

        return this.jugador;
    }

    public ContextoDelJuego getContextoDelJuego() {

        return this.jugador.getContextoDelJuego();
    }

    public void guardarPartida() {

        Repositorio.Guardar(this.jugador);
    }

    public void borrarPartida(String nombreJugador) {

        Repositorio.borrar(nombreJugador);
    }

    public CondicionDeTriunfo getCondicionDeTriunfo() {

        return this.getContextoDelJuego().getCondicionDeTriunfo();
    }

    public OrdenDeArresto getOrdenDeArresto() {

        return this.getJugador().getOrdenDeArresto();
    }

    public void nuevoCaso() {

        this.jugador.comenzarNuevoJuego();
    }

    public boolean jugadorTienePartidaGuardada(String jugador) {

        List<String> listaJugadoresGuardados =
            Repositorio.getListaDeJugadores();

        for (String jugadorGuardado : listaJugadoresGuardados) {
            if (jugador.equals(jugadorGuardado)) {
                return Boolean.TRUE;
            }
        }
        return Boolean.FALSE;
    }
}
